package com.gongren.project.job.odd;

import com.alibaba.dubbo.config.annotation.Reference;
import com.gongren.project.odd.job.rpc.api.service.taskRpc.IOrderTaskRpcService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

/**
 * @Author houzhong
 * @Date 2017/9/1 12:49
 */
@Component("orderTask")
public class OrderTask {

    private static final Logger LOGGER = LoggerFactory.getLogger(OrderTask.class);

    @Reference
    private IOrderTaskRpcService orderTaskRpcService;

    /**
     * 定时任务：定时任务执行频率：1分钟/次 1、如果当前时间+30分钟>=该零工每天开始时间，执行推送：“｛任务名称｝”还有30分钟开工”； 短信推送
     */
    // modify by cyZhao 2017-06-05 修改因过期数据导致短信频繁发送bug start
    // modify by jgYang 2017-06-05 因为老数据导入bug，导致短信频繁发送。临时关闭定时 start
    @Transactional
    //@Scheduled(cron = "0 0/1 * * * ? ")
    public void excuteOrderToStartTask(){

        LOGGER.info("OrderTask and excuteOrderToStartTask start");
        try {
            orderTaskRpcService.findAllExcuteOrderToStartTask();

            LOGGER.info("OrderTask and excuteOrderToStartTask  end ");
        }catch (Exception e) {
            LOGGER.error("OrderTask and excuteOrderToStartTask ：", e);
        }
    }


    /**
     * 定时任务：定时任务执行频率：1分钟/次 2、如果当前时间==该零工每天开始时间，执行推送：“｛任务名称｝”已经开工，赶快进行开工打卡
     */
    // modify by cyZhao 2017-06-05 修改因过期数据导致短信频繁发送bug start
    // modify by jgYang 2017-06-05 因为老数据导入bug，导致短信频繁发送。临时关闭定时 start
    @Transactional
    //@Scheduled(cron = "0 0/1 * * * ? ")
    public void excuteOrderToWorkingTask(){
        LOGGER.info("OrderTask and excuteOrderToWorkingTask start ");
        try {
            orderTaskRpcService.findAllExcuteOrderToWorkingTask();

            LOGGER.info("OrderTask and excuteOrderToWorkingTask end");
        }catch (Exception e) {
            LOGGER.error("OrderTask and excuteOrderToWorkingTask：", e);
        }
    }

    /**
     * 定时任务：定时任务执行频率：1分钟/次
     * 3、如果当前时间大于零工开工时间+30分钟，执行：扣除当前雇员诚信值1分，执行推送：“｛任务名称｝”已经迟到打卡，将扣除你的诚信值；
     */
    @Transactional
   // @Scheduled(cron = "0 0/1 * * * ? ")
    public void excuteOrderToLateTask(){

        LOGGER.info("OrderTask and excuteOrderToLateTask start");
        try {
            orderTaskRpcService.findAllExcuteOrderToLateTask();

            LOGGER.info("OrderTask and excuteOrderToLateTask end");
        }catch (Exception e) {
            LOGGER.error("OrderTask and excuteOrderToLateTask：", e);
        }
    }

    /**
     * 定时任务：执行频率：每天24点执行一次
     * 查询零工计量单位(1.天,2.时)没有提交确认完成的零工订单，在结束时间+12小时，将该订单状态变为待支付，
     * 记录未进行收工打卡，向雇主推送消息：“｛标题｝”已经完成任务，去支付报酬吧；
     */
    @Transactional
    //@Scheduled(cron = "0 0 0 * * ? ")
    public void excuteOrderToWorkingSureTask(){

        LOGGER.info("OrderTask and excuteOrderToWorkingSureTask start");
        try {
            orderTaskRpcService.findAllExcuteOrderToWorkingSureTask();

            LOGGER.info("OrderTask and excuteOrderToWorkingSureTask end");
        }catch (Exception e) {
            LOGGER.error("OrderTask and excuteOrderToWorkingSureTask：", e);
        }
    }

    /**
     * 未同意订单，24小时自动拒绝
     *
     * @throws Exception
     */
    @Transactional
    //@Scheduled(cron = "0 0 0/1 * * ? ")
    public void excuteOrderToAutoRefuse(){
        LOGGER.info("OrderTask and excuteOrderToAutoRefuse start");
        try {
            orderTaskRpcService.findAllExcuteOrderToAutoRefuse();

            LOGGER.info("OrderTask and excuteOrderToAutoRefuse end");
        }catch (Exception e) {
            LOGGER.error("OrderTask and excuteOrderToAutoRefuse：", e);
        }
    }

    /**
     * 对于无法被自动打卡扫到的且在任务结束之后仍未开工打卡的订单，进行取消处理。 Author: zhcy Date: 2017年8月1日
     * 上午9:39:53
     *
     * @throws Exception
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    @Transactional
    //@Scheduled(cron = "0 0 0/1 * * ? ")
    public void excuteOrderToCancel(){

        LOGGER.info("OrderTask and excuteOrderToCancel start");
        try {
            orderTaskRpcService.findAllExcuteOrderToCancel();

            LOGGER.info("OrderTask and excuteOrderToCancel end");
        }catch (Exception e) {
            LOGGER.error("OrderTask and excuteOrderToCancel：{}", e);
        }
    }
}
